package com.github.manx98.okdownloader.utils;

import com.github.manx98.okdownloader.config.DownloadLinkConfig;
import com.github.rholder.retry.Retryer;
import okhttp3.Request;

/**
 * 描述下载链接信息
 * @author : Shinelon
 * @date : 2021/5/22
 */
public final class DownloadLink {
    private final String url;
    private final int maxWorkers;
    private final DownloadLinkConfig downloadLinkConfig;

    /**
     * 下载链接对象
     * @param url 下载链接
     * @param downloadLinkConfig 下载链接配置
     * @param maxWorkers 链接的下载最大线程
     */
    public DownloadLink(String url, DownloadLinkConfig downloadLinkConfig, int maxWorkers) {
        this.url = url;
        this.downloadLinkConfig = downloadLinkConfig;
        this.maxWorkers = maxWorkers;
    }

    /**
     * 获取下载线程数
     */
    public int getMaxWorkers() {
        return maxWorkers;
    }

    /**
     * 创建一个断点下载请求
     * @param start 下载起始
     * @param end 下载结束
     * @return 下载请求
     */
    protected Request getDownloadRequest(long start, long end){
        return downloadLinkConfig.getDownloadRequest(url,start,end);
    }

    /**
     * 创建一个普通下载请求
     * @return 下载请求
     */
    protected Request getDownloadRequest(){
        return downloadLinkConfig.getDownloadRequest(url);
    }

    /**
     * 创建一个重试器
     * @return 返回一个重试器
     */
    protected Retryer<Short> getRetryer(){
        return downloadLinkConfig.getRetryer();
    }

    /**
     * 获取链接
     * @return 下载链接
     */
    public String getUrl() {
        return url;
    }
}
